﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InfiniteRogue.Rules
{
    public class EngineRules
    {
        public EngineRules(Engine e)
        {
            Combat = new Combat(e);
            Bounty = new Bounty();
        }

        public IBountySystem Bounty { get; private set; }
        public ICombatSystem Combat { get; private set; }
    }

    /// <summary>
    /// In case we want to rewrite the system or try different systems
    /// </summary>
    public interface ICombatSystem
    {
        void MeleeAttackTargets(Character attacker, IEnumerable<Character> targets);
        void MeleeAttackRadial(Character attacker, int radius);
        void MeleeAttackSingle(Character attacker, Character defender);
        void CriticalAttack(Character attacker, Character defender);
        void StunAttack(Character attacker, Character defender);
    }

    public interface IBountySystem
    {
        void ProcessCombatVictory(Character victor, Character loser, Engine engine);
        int LevelFromExp(int exp);
        void LevelUp(Character character);
    }
}
